%{
#include <stdio.h>
%}

%token T_PROGRAMA
%token T_INTEIRO
%token T_ESCREVA
%token T_TEXTO
%token T_INICIO
%token T_FIM
%token T_IDENTIFICADOR
%token T_VAR
%token T_DELIMITADOR
%token T_ENQUANTO
%token T_REPITA
%token T_ATE
%token T_REL_IGUAL
%token T_REL_MENOR
%token T_REL_MAIOR_IGUAL
%token T_REL_MENOR_IGUAL
%token T_REL_DIFERENTE
%token T_LETRA
%token T_ABRE_CHAVES
%token T_DOIS_PONTOS
%token T_FECHA_CHAVES

%start programa
%%

programa:
	T_PROGRAMA T_IDENTIFICADOR
	corpo
	;
	
corpo:
	T_INICIO
	lista_instrucao
	T_FIM
	T_DELIMITADOR
	; 
	
lista_instrucao:
	T_ESCREVA T_DELIMITADOR T_TEXTO T_DELIMITADOR
	T_DELIMITADOR
	;
	
instrucao_enquanto:
	T_ENQUANTO
	;
	
instrucao_repita:
	T_REPITA
	corpo
	T_ATE
	expressao
	;
	
relogica:
	T_REL_IGUAL | T_REL_MENOR | T_REL_MAIOR_IGUAL | T_REL_MENOR_IGUAL | T_REL_DIFERENTE
	;
	
letra:
	T_LETRA
	;
	
corpo:
	instrucao_simples | instrucao_estruturada
	;
	
instrucao_simples:
	instrucao_atribuicao | instrucao_procedimento | vazio
	;
	
instrucao_composta:
	T_INICIO instrucao T_ABRE_CHAVES T_DOIS_PONTOS instrucao T_FECHA_CHAVES T_FIM
	;
	
instrucao_condicional:
	instrucao_se
	;

instrucao_repeticao:
	instrucao_enquanto | instrucao_repita | instrucao_para
	;
%%

int yyerror(char *s) {
	printf("yyerror %s\n", s);
}

int main() {
	yyparse();
}
